package 剑指offer;


import java.util.HashMap;
import java.util.Map;

/**
 * @author: tyy 剑指 Offer
 * 423. 从英文中重建数字
给你一个字符串 s ，其中包含字母顺序打乱的用英文单词表示的若干数字（0-9）。按 升序 返回原始的数字。
示例 1：
输入：s = "owoztneoer"
输出："012"
 * @create: 2021-11-20 17:40
 * @description:
 **/
public class Solution32 {

    /*public String originalDigits(String s) {
        char[]str = s.toCharArray();
        int[]times = new int[10];
        for (char ch : str) {
            switch (ch) {
                case 'z' -> times[0]++;
                case 'o' -> times[1]++;
                case 'w' -> times[2]++;
                case 'h' -> times[3]++;
                case 'u' -> times[4]++;
                case 'f' -> times[5]++;
                case 'x' -> times[6]++;
                case 's' -> times[7]++;
                case 'g' -> times[8]++;
                case 'i' -> times[9]++;
            }
        }
        times[1] -= times[0] + times[2] + times[4];
        times[3] -= times[8];
        times[5] -= times[4];
        times[7] -= times[6];
        times[9] -= times[5] + times[6] + times[8];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < times.length; i++) {
            sb.append(String.valueOf(i).repeat(times[i]));
        }
        return sb.toString();
    }*/
    public String originalDigits(String s) {
        Map<Character,Integer> map=new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if(map.containsKey(s.charAt(i))){
                int count=map.get(s.charAt(i))+1;
                map.put(s.charAt(i),count);
            }else{
                map.put(s.charAt(i),1);
            }
        }
        int[] count=new int[10];
        //0的个数
        if(map.containsKey('z')){
            count[0]=map.get('z');
        }
        //2的个数
        if(map.containsKey('w')){
            count[2]=map.get('w');
        }
        //4的个数
        if(map.containsKey('u')){
            count[4]=map.get('u');
        }
        //6的个数
        if(map.containsKey('x')){
            count[6]=map.get('x');
        }
        //8的个数
        if(map.containsKey('g')){
            count[8]=map.get('g');
        }
        //1的个数
        if(map.containsKey('o')){
            int jump=map.get('o')-count[0]-count[2]-count[4];
            count[1]=Math.max(jump,0);
        }
        //3的个数
        if(map.containsKey('t')){
            int jump=map.get('t')-count[2]-count[8];
            count[3]=Math.max(jump,0);
        }
        //5的个数
        if(map.containsKey('f')){
            count[5]=map.get('f')-count[4];
        }
        //7的个数
        if(map.containsKey('s')){
            count[7]=map.get('s')-count[6];
        }
        //9的个数
        if(map.containsKey('i')){
            count[9]=map.get('i')-count[5]-count[6]-count[8];
        }
        String str="";
        for (int i=0;i<10;i++){
            String jump="";
            for(int j=0;j<count[i];j++){
                jump+=i;
            }
            str+=jump;
        }
        return str;
    }
    public static void main(String[] args) {
        Solution32 solution26 = new Solution32();
        String s = "owoztneoer";
        String count = solution26.originalDigits(s);
        System.out.println("count = " + count);

    }
}
